//1.当前元素的前一个元素兼容IE
function preve(ele) {
    return ele.previousElementSibling || ele.previousSibling;
}

//2.当前元素的后一个元素兼容IE
function next(ele) {
    return ele.nextElementSibling || ele.nextSibling;
}

//3.第一个子元素兼容IE
function firstChild(ele) {
    return ele.firstElementChild || ele.firstChild;
}

//4.最后一个子元素兼容IE
function lastChild(ele) {
    return ele.lastElementChild || ele.lastChild;
}

// 4.js获取非行内样式的方法兼容IE  ele: 元素  attr: 样式的属性名
function getStyle(ele, attr) {
    if (window.getComputedStyle) {  //取值 判断方法是否存在   存在:常规浏览器
        return window.getComputedStyle(ele)[attr];
    } else {  //不存在 => IE
        return ele.currentStyle[attr];
    }
}

// 5.事件对象的兼容写法  不是函数！
function event(e) {
    var e = e || window.event;
    var target = e.target || e.srcElement;

    // 火狐低版本没有pageX pageY  
    // 兼容写法 =>  自己算
    var pageX = e.clientX + (document.documentElement.scrollLeft || document.body.scrollLeft);
    var pageY = e.clientY + (document.documentElement.scrollTop || document.body.scrollTop);
}

// 6.事件监听，添加二级dom事件兼容Ie
function addEvent(ele, type, fn) {
    if (ele.addEventListener) {
        ele.addEventListener(type, fn);
    } else {
        ele.attachEvent("on" + type, fn);
    }
}

// 7.事件监听，删除二级dom事件兼容Ie
function removeEvent(ele, type, fn) {
    if (ele.removeEventListener) {
        ele.removeEventListener(type, fn);
    } else {
        ele.detachEvent("on" + type, fn);
    }
}

// 8.文档可视宽高兼容IE
var clientWidth = document.documentElement.clientWidth || document.body.clientWidth;
var clientHeight = document.documentElement.clientHeight || document.body.clientHeight;
console.log(clientWidth, clientHeight);

// 9.文档实际宽高兼容IE
var scrollWidth = document.documentElement.scrollWidth || document.body.scrollWidth;
var scrollHeight = document.documentElement.scrollHeight || document.body.scrollHeight;

// 10.滚动条距离文档左侧/顶部的位置 兼容IE
var scrollLeft = document.documentElement.scrollLeft || document.body.scrollLeft;
var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;

// 11.阻止事件冒泡
if (e.stopPropagation) {
    e.stopPropagation();
} else {
    e.cancelBubble = true;
}

// 12.阻止浏览器的默认行为
if (e.preventDefault) {
    e.preventDefault();
} else {
    e.returnValue = false;
}

// 13.键盘码
var keyCode = e.keyCode || e.which;